#include <ESP32Servo.h>

const int InA = A2; // 光敏电阻连接的模拟输入引脚
const int InB = A3; // 光敏电阻连接的模拟输入引脚
const int limit_r = 15;    //响应临界值
const int limit_s = 30;    //旋转临界值
const int delta_angle = 10;//每次转动的角度
const int delay_time = 50; //响应间隔

int valA,valB;     //用于存储两个光敏电阻的数值
int pvalA,pvalB;   //前一时刻光敏电阻引脚数值
int angle = 90;    //设置初始角度

Servo myServo;

void setup() {
  myServo.attach(A4);      //定义舵机接口
  myServo.write(angle);    //初始化舵机角度为90度
  pinMode(InA, INPUT);     //设置输入引脚
  pinMode(InB, INPUT);
  pvalA = analogRead(InA); //预读取引脚数值
  pvalB = analogRead(InB);
  Serial.begin(9600);
}

void loop() {
  int valA = analogRead(InA);  //读取A光敏电阻数据
  int valB = analogRead(InB);  //读取B光敏电阻数据
  if(fabs(pvalA - valA) > limit_r || fabs(pvalB - valB) > limit_r)
  {
    if(valA - valB > limit_s){
      angle = angle + delta_angle;     //角度++
      angle = constrain(angle,0,180);  //约束输出
      myServo.write(angle);            //执行角度
    }
    if(valA - valB < -limit_s){
      angle = angle - delta_angle;
      angle = constrain(angle,0,180);
      myServo.write(angle);   
    }
  }
  pvalA = valA;
  pvalB = valB;
  Serial.println("A=");
  Serial.println(valA);
  Serial.println("B=");
  Serial.println(valB);
  Serial.println("Angle=");
  Serial.println(angle);
  delay(delay_time);
}